<?php

namespace common\components\wechat\mp;

use Yii;
use yii\base\Model;

/**
 * 退款模型
 * @package common\components\wechat\components\mp
 */
class Mmpaymkttransfers extends Model {

    /**
     * 商户账号appid
     * 申请商户号的appid或商户号绑定的appid
     * @var String
     */
    public $mch_appid;

    /**
     * 商户号
     * 微信支付分配的商户号
     * @var String(32)
     */
    public $mchid;

    /**
     * 设备号
     * 微信支付分配的终端设备号
     * 否
     * @var String(32)
     */
    public $device_info;

    /**
     * 随机字符串
     * 随机字符串，不长于32位
     * @var String(32)
     */
    public $nonce_str = null;

    /**
     * 签名
     * 签名，详见签名算法
     * @var String(32)
     */
    public $sign;

    /**
     * 商户订单号
     * 商户订单号，需保持唯一性(只能是字母或者数字，不能包含有符号)
     * @var String
     */
    public $partner_trade_no;

    /**
     * 用户openid
     * 商户appid下，某用户的openid
     * @var String
     */
    public $openid;

    /**
     * 校验用户姓名选项
     * NO_CHECK：不校验真实姓名
     * FORCE_CHECK：强校验真实姓名
     * @var String
     */
    public $check_name;

    /**
     * 收款用户姓名（可选）
     * 收款用户真实姓名。如果check_name设置为FORCE_CHECK，则必填用户真实姓名
     * @var String
     */
    public $re_user_name;

    /**
     * 金额
     * 企业付款金额，单位为分
     * @var Int
     */
    public $amount;

    /**
     * 企业付款描述信息
     * 企业付款操作说明信息。必填。
     * @var String
     */
    public $desc;

    /**
     * Ip地址
     * 该IP同在商户平台设置的IP白名单中的IP没有关联，该IP可传用户端或者服务端的IP。
     * @var String(32)
     */
    public $spbill_create_ip = null;

    /**
     * @inheritdoc
     * @throws InvalidConfigException
     */
    public function init() {
        if ($this->nonce_str === null) {
            $this->setNonceStr();
        }
        if ($this->spbill_create_ip === null) {
            $this->setSpbillCreateIp();
        }
    }

    /**
     * 生成随机字符串
     * @return string
     */
    public function setNonceStr($nonce_str = null) {
        if ($nonce_str === null) {
            $nonce_str = \common\helpers\Utils::random(32);
        }
        return $this->nonce_str = $nonce_str;
    }

    /**
     * 生成IP
     * @return bool
     */
    public function setSpbillCreateIp() {
        return $this->spbill_create_ip = Yii::$app->request->userIP;
    }

}
